'\" e
'\"! eqn | mmdoc
'\"macro stdmacro
.ds Vn Version 1.2
.ds Dt 24 September 1999
.ds Re Release 1.2.1
.ds Dp Jan 14 18:30
.ds Dm 01 fog.gl ->
.ds Xs 7467 7 fog.gl
.TH GLFOG 3G
.SH NAME
.B "glFogf, glFogi, glFogfv, glFogiv
\- specify fog parameters

.SH C SPECIFICATION
void \f3glFogf\fP(
GLenum \fIpname\fP,
.nf
.ta \w'\f3void \fPglFogf( 'u
	GLfloat \fIparam\fP )
.fi
void \f3glFogi\fP(
GLenum \fIpname\fP,
.nf
.ta \w'\f3void \fPglFogi( 'u
	GLint \fIparam\fP )
.fi

.EQ
delim $$
.EN
.SH PARAMETERS
.TP \w'\fIparams\fP\ \ 'u 
\f2pname\fP
Specifies a single-valued fog parameter.
\%\f3GL_FOG_MODE\fP,
\%\f3GL_FOG_DENSITY\fP,
\%\f3GL_FOG_START\fP,
\%\f3GL_FOG_END\fP,
and
\%\f3GL_FOG_INDEX\fP
are accepted.
.TP
\f2param\fP
Specifies the value that \f2pname\fP will be set to.
.SH C SPECIFICATION
void \f3glFogfv\fP(
GLenum \fIpname\fP,
.nf
.ta \w'\f3void \fPglFogfv( 'u
	const GLfloat \fI*params\fP )
.fi
void \f3glFogiv\fP(
GLenum \fIpname\fP,
.nf
.ta \w'\f3void \fPglFogiv( 'u
	const GLint \fI*params\fP )
.fi

.SH PARAMETERS
.TP
\f2pname\fP
Specifies a fog parameter.
\%\f3GL_FOG_MODE\fP,
\%\f3GL_FOG_DENSITY\fP,
\%\f3GL_FOG_START\fP,
\%\f3GL_FOG_END\fP,
\%\f3GL_FOG_INDEX\fP,
and
\%\f3GL_FOG_COLOR\fP
are accepted.
.TP
\f2params\fP
Specifies the value or values to be assigned to \f2pname\fP.
\%\f3GL_FOG_COLOR\fP requires an array of four values.
All other parameters accept an array containing only a single value.
.SH DESCRIPTION
Fog is initially disabled.
While enabled, fog affects rasterized geometry,
bitmaps, and pixel blocks, but not buffer clear operations. To enable
and disable fog, call \%\f3glEnable\fP and \%\f3glDisable\fP with argument
\%\f3GL_FOG\fP. 
.P
\%\f3glFog\fP assigns the value or values in \f2params\fP to the fog parameter
specified by \f2pname\fP.
The following values are accepted for \f2pname\fP:
.TP 20
\%\f3GL_FOG_MODE\fP
\f2params\fP is a single integer or floating-point value that specifies
the equation to be used to compute the fog blend factor, $f$.
Three symbolic constants are accepted:
\%\f3GL_LINEAR\fP,
\%\f3GL_EXP\fP,
and \%\f3GL_EXP2\fP.
The equations corresponding to these symbolic constants are defined below.
The initial fog mode is \%\f3GL_EXP\fP.
.TP
\%\f3GL_FOG_DENSITY\fP
\f2params\fP is a single integer or floating-point value that specifies $density$,
the fog density used in both exponential fog equations.
Only nonnegative densities are accepted.
The initial fog density is 1.
.TP
\%\f3GL_FOG_START\fP
\f2params\fP is a single integer or floating-point value that specifies $start$,
the near distance used in the linear fog equation.
The initial near distance is 0.
.TP
\%\f3GL_FOG_END\fP
\f2params\fP is a single integer or floating-point value that specifies $end$,
the far distance used in the linear fog equation.
The initial far distance is 1.
.TP
\%\f3GL_FOG_INDEX\fP
\f2params\fP is a single integer or floating-point value that specifies
$i sub f$,
the fog color index.
The initial fog index is 0.
.TP
\%\f3GL_FOG_COLOR\fP
\f2params\fP contains four integer or floating-point values that specify
$C sub f$, the fog color.
Integer values are mapped linearly such that the most positive representable
value maps to 1.0,
and the most negative representable value maps to \-1.0.
Floating-point values are mapped directly.
After conversion,
all color components are clamped to the range [0,1].
The initial fog color is (0, 0, 0, 0).
.P
Fog blends a fog color with each rasterized pixel fragment's posttexturing
color using a blending factor $f$.
Factor $f$ is computed in one of three ways,
depending on the fog mode.
Let $z$ be the distance in eye coordinates from the origin to the fragment
being fogged.
The equation for \%\f3GL_LINEAR\fP fog is
.ce

.EQ
f ~=~ {end ~-~ z} over {end ~-~ start}
.EN

.RE
.P
The equation for \%\f3GL_EXP\fP fog is
.ce

.EQ
f ~=~ e sup {-^(density ~cdot~ z)}
.EN

.P
The equation for \%\f3GL_EXP2\fP fog is
.ce

.EQ
f ~=~ e sup {-^(density ~cdot~ z)} sup 2
.EN

.P
Regardless of the fog mode,
$f$ is clamped to the range [0,\ 1] after it is computed.
Then,
if the GL is in RGBA color mode,
the fragment's red, green, and blue colors, represented by $C sub r$,
are replaced by
.sp
.ce
.EQ
{C sub r} sup prime ~=~ f^C sub r ~+~ (1 - f)^C sub f 
.EN

.sp
Fog does not affect a fragment's alpha component.
.P
In color index mode, the fragment's color index $i sub r$ is replaced by
.sp
.ce
.EQ
{i sub r} sup prime ~=~ i sub r ~+~ (1 - f)^i sub f 
.EN
.P
.SH ERRORS
\%\f3GL_INVALID_ENUM\fP is generated if \f2pname\fP is not an accepted value,
or if \f2pname\fP is \%\f3GL_FOG_MODE\fP and \f2params\fP is not an accepted value.
.P
\%\f3GL_INVALID_VALUE\fP is generated if \f2pname\fP is \%\f3GL_FOG_DENSITY\fP, 
and \f2params\fP is negative.
.P
\%\f3GL_INVALID_OPERATION\fP is generated if \%\f3glFog\fP
is executed between the execution of \%\f3glBegin\fP
and the corresponding execution of \%\f3glEnd\fP.
.SH ASSOCIATED GETS
\%\f3glIsEnabled\fP with argument \%\f3GL_FOG\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_COLOR\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_INDEX\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_DENSITY\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_START\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_END\fP
.br
\%\f3glGet\fP with argument \%\f3GL_FOG_MODE\fP
.SH SEE ALSO
\%\f3glEnable(3G)\fP
